/*
 * FPGA初始化与通讯
 */

#ifndef FPGA_H_
#define FPGA_H_

#include "driverlib\MSP430F5xx_6xx\driverlib.h"
#include "msp430.h"
#include "string.h"
#include "head\DebugTool.h"

/*
 * 引脚与模块定义
 */
//----------------------------串口与电源----------------------------
#define FPGA_USCI_PORT                              GPIO_PORT_P10
#define FPGA_USCI_PIN_TX                            GPIO_PIN4//p10.4
#define FPGA_USCI_PIN_RX                            GPIO_PIN5//p10.5
#define FPGA_USCI_BASE                              USCI_A3_BASE
//--------------------------接收光谱仪数据--------------------------
#define FPGA_RX_SPECTROMETER_SIGNAL_PORT            GPIO_PORT_P4
#define FPGA_RX_SPECTROMETER_SIGNAL_RISE_PIN        GPIO_PIN0//p4.0
#define FPGA_RX_SPECTROMETER_SIGNAL_CLK_PIN         GPIO_PIN1//p4.1
#define FPGA_RX_SPECTROMETER_DATA_PORT              GPIO_PORT_P1
#define FPGA_RX_SPECTROMETER_DATA_PIN               GPIO_PIN_ALL8//p1
#define FPGA_RX_SPECTROMETER_SIGNAL_REG_PORT        P4IN
#define FPGA_RX_SPECTROMETER_SIGNAL_REG_RISE_PIN    BIT0
#define FPGA_RX_SPECTROMETER_SIGNAL_REG_CLK_PIN     BIT1
#define FPGA_RX_SPECTROMETER_DATA_REG_PIN           P1IN

/*
 * 变量与数组
 */
#define FPGA_USCI_RxBuff_LEN 128
#define FPGA_RxParameter_Length 8

uint8_t *pFPGA_RxBuff;
uint8_t *pFPGA_RxCount;
uint8_t FPGA_USCI_RxBuff[FPGA_USCI_RxBuff_LEN];
uint8_t FPGA_USCI_RxBuffCount;
bool isRxFromRS485;

/*
 * @brief  初始化FPGA的串口通讯
 * @param  无
 * @retval 无
 */
void FPGA_Init();

/*
 * @brief  采集一帧光谱仪的数据
 * @param  data:返回一帧光谱仪的数据
 * @retval 无 */
void FPGA_ReceiveSpectrometer(uint8_t *data);

/*
 * @brief  解析FPGA从串口发送过来的usb信息
 * @param
 *          RxCommand:命令号
 *          RxParameter：参数
 *          RxParameterCount：参数长度（以字节位单位）
 * @retval 无 */
int8_t FPGA_parseUSB_Buffer(uint8_t *RxCommand,uint8_t *RxParameter,uint8_t *RxParameterCount);

/*
 * @brief  输入index判断是否超出队列RxBuffer的缓存空间，并返回正确的值
 * @param  无
 * @retval 返回正确的index */
uint8_t FPGA_getQueueIndex(uint8_t index);

/*
 * @brief  通过FPGA从RS485/RS232获取数据
 * @param  无
 * @retval 无 */
void FPGA_getRS485(uint8_t *para,uint8_t paraLen,uint8_t *buff,uint8_t *buffCount,uint16_t uartBaseAddress);

/*
 * @brief  发送字符串
 * @param
 *          str：要发送的字符串
 * @retval 无 */
void FPGA_sendStr(uint8_t *str);

/*
 * @brief  发送字符串
 * @param
 *          str：要发送的字符串
 *          len：字符串长度（字节为单位）
 * @retval 无 */
void FPGA_sendStrLen(uint8_t *str,uint16_t len);

#endif /* FPGA_H_ */
